package com.ruoyi.match.service.impl;

import java.util.List;

import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.match.config.BloomFilterExample;
import com.ruoyi.match.domain.ChOrder;
import org.apache.poi.ss.formula.functions.Address;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.match.mapper.RyAddrMapper;
import com.ruoyi.match.domain.RyAddr;
import com.ruoyi.match.service.IRyAddrService;

/**
 * 地区表Service业务层处理
 * 
 * @author ruoyi
 * @date 2023-12-15
 */
@Service
public class RyAddrServiceImpl implements IRyAddrService 
{
    @Autowired
    private RyAddrMapper ryAddrMapper;

    @Autowired
    private RedisService redisService;


    @Autowired
    BloomFilterExample bloomFilter;



    /**
     * 查询地区表
     * 
     * @param id 地区表主键
     * @return 地区表
     */
    @Override
    public RyAddr selectRyAddrById(Long id)
    {
        return ryAddrMapper.selectRyAddrById(id);
    }

    /**
     * 查询地区表列表
     * 
     * @param ryAddr 地区表
     * @return 地区表
     */
    @Override
    public List<RyAddr> selectRyAddrList(RyAddr ryAddr)
    {
        return ryAddrMapper.selectRyAddrList(ryAddr);
    }

    /**
     * 新增地区表
     * 
     * @param ryAddr 地区表
     * @return 结果
     */
    @Override
    public int insertRyAddr(RyAddr ryAddr)
    {
        return ryAddrMapper.insertRyAddr(ryAddr);
    }

    /**
     * 修改地区表
     * 
     * @param ryAddr 地区表
     * @return 结果
     */
    @Override
    public int updateRyAddr(RyAddr ryAddr)
    {
        return ryAddrMapper.updateRyAddr(ryAddr);
    }

    /**
     * 批量删除地区表
     * 
     * @param ids 需要删除的地区表主键
     * @return 结果
     */
    @Override
    public int deleteRyAddrByIds(Long[] ids)
    {
        return ryAddrMapper.deleteRyAddrByIds(ids);
    }

    /**
     * 删除地区表信息
     * 
     * @param id 地区表主键
     * @return 结果
     */
    @Override
    public int deleteRyAddrById(Long id)
    {
        return ryAddrMapper.deleteRyAddrById(id);
    }

    @Override
    public List<RyAddr> selectListShow() {
        return ryAddrMapper.selectListShow();
    }

    @Override
    public List<RyAddr> getByPid(Integer pid) {
        // 项目启动时缓存的数据
        if (pid <= 35) {
            return ryAddrMapper.getByPid(pid); // 如果 pid 在某个范围内，直接从数据库中获取数据
        }

        String key = "addr:" + pid;
        List<RyAddr> list = null;
        // 先判断redis中是否有值
        if (redisService.hasKey(key)) {
            // 有数据
            list = redisService.getCacheList(key);
            return list;
        } else {
            // 无数据
            list = ryAddrMapper.getByPid(pid);
            if (list != null && !list.isEmpty()) {
                redisService.setCacheList(key, list);
                bloomFilter.put(key); // 将查询到的数据加入布隆过滤器
            } else {
                bloomFilter.put("addr:" + pid); // 将空结果也加入布隆过滤器，防止缓存穿透
            }
            return list;
        }

    }



}
